package array.simulation;

/**
 * @Author: 海琳琦
 * @Date: 2021/12/16 12:55
 * 给你一个正整数 n ，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
 * 输入：n = 3
 * 输出：[[1,2,3],[8,9,4],[7,6,5]]
 *
 * https://leetcode-cn.com/problems/spiral-matrix-ii/
 */
public class Title59 {
    public static void main(String[] args) {
        int[][] ints = generateMatrix(3);
        System.out.println();
    }

    private static int[][] generateMatrix(int n) {
        int[][] result = new int[n][n];
        //计数
        int count = 1;
        //循环圈数
        int loop = n / 2;
        //每次循环缩进格数
        int offset = 1;
        //中间格子
        int mid = n / 2;
        //开始遍历时x,y
        int startX = 0, startY = 0;
        int i, j;
        while (loop-->0) {
            //上行 左到右
            for (j = startY; j < n + startY - offset; j++) {
                result[startX][j] = count++;
            }
            //右列 左到右
            for (i = startX; i < n + startX - offset; i++) {
                result[i][j] = count++;
            }
            //下行 左到右
            for (; j > startY; j--) {
                result[i][j] = count++;
            }
            //左列
            for (; i > startX; i--) {
                result[i][j] = count++;
            }
            //第二圈
            startX++;
            startY++;
            // offset 控制每一圈里每一条边遍历的长度
            offset += 2;
        }
        // 如果n为奇数的话，需要单独给矩阵最中间的位置赋值
        if (n % 2 != 0) {
            result[mid][mid] = count;
        }
        return result;
    }
}
